共计 1537 个字符,预计需要花费 4 分钟才能阅读完成。
题目描述
幼儿园两个班的小朋友在排队时混在了一起,每位小朋友都知道自己是否与前面一位小朋友是否同班,请你帮忙把同班的小朋友找出来。
小朋友的编号为整数,与前一位小朋友同班用Y表示,不同班用N表示。
题目要求
- 输入为:空格分开的小朋友编号和是否同班标志。
比如:6/N 2/Y 3/N 4/Y,表示共4位小朋友,2和6同班,3和2不同班,4和3同班。
其中,小朋友总数不超过999,每个小朋友编号大于0,小于等于999。
不考虑输入格式错误问题。 - 输出为:两行,每一行记录一个班小朋友的编号,编号用空格分开。且:
- 编号需要按照大小升序排列,分班记录中第一个编号小的排在第一行。
- 若只有一个班的小朋友,第二行为空行。
- 若输入不符合要求,则直接输出字符串ERROR。
示例1
输入
1/N 2/Y 3/N 4/Y
输出
1 2
3 4
说明
2的同班标记为Y,因此和1同班。
3的同班标记为N,因此和1、2不同班。
4的同班标记为Y,因此和3同班。
所以1、2同班,3、4同班,输出为
1 2
3 4
JAVA解法
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Scanner;
/**
* @since 2022年4月18日
*/
public class DivideClass {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String teamStr = scanner.nextLine();
String[] childs = teamStr.split(" ");
if (childs.length > 999) {
System.out.println("ERROR");
}
// 分开两个班级
ArrayList<String> classA = new ArrayList<>();
ArrayList<String> classB = new ArrayList<>();
String classNum = "";
for (int i = 0; i < childs.length; i++) {
if (i == 0) {
String first = childs[0];
classA.add(first.split("/")[0]);
classNum = "A";
continue;
}
String follow = childs[i];
boolean isSameClass = follow.endsWith("Y");
String stu = follow.split("/")[0];
if ("A".equals(classNum)) {
if (isSameClass) {
classA.add(stu);
} else {
classB.add(stu);
}
classNum = isSameClass ? "A" : "B";
} else {
if (isSameClass) {
classB.add(stu);
} else {
classA.add(stu);
}
classNum = isSameClass ? "B" : "A";
}
}
classA.sort(Comparator.comparingInt(Integer::parseInt));
classB.sort(Comparator.comparingInt(Integer::parseInt));
System.out.println(classA.toString().replace("[", "").replace("]", "").replace(",", " "));
System.out.println(classB.toString().replace("[", "").replace("]", "").replace(",", " "));
}
}
正文完
算法题库分班